<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递归函数</title>
    <script>
        /* 
            递归函数
                调用自身的函数称为递归函数
                递归的作用和循环是基本一致的,不同点在于递归的思路比较简单，但是循环的性能更好。
                在开发中尽量用循环解决，少用递归。只在一些循环比较麻烦的情况下使用递归。

            编写递归一定要包含两个要件
                1.基线条件（递归的终止条件）
                2.递归条件(如何对问题进行拆分)
        */
        /* 
           function fn(){
                fn()
           }
           fn()
        */

        // 创建一个函数，可以用来求任意数的阶乘。

        //  循环
        function fn(number) {
            let result = 1
            for (i = 1; i <= number; i++) {
                result = i * result
            }
            return result
        }

        console.log(fn(10))


        //  递归
        fn1 = (num) => {
            if (num === 1) {
                result = 1
            }
            else {
                result = fn1(num - 1) * num
            }
            return result
        }

        console.log(fn1(10))
    </script>
</head>

<body>

</body>

</html>